// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::VmMigration].
#[async_trait::async_trait]
pub trait VmMigration: std::fmt::Debug + Send + Sync {
    async fn list_sources(
        &self,
        req: crate::model::ListSourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSourcesResponse>>;

    async fn get_source(
        &self,
        req: crate::model::GetSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Source>>;

    async fn create_source(
        &self,
        req: crate::model::CreateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_source(
        &self,
        req: crate::model::UpdateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_source(
        &self,
        req: crate::model::DeleteSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn fetch_inventory(
        &self,
        req: crate::model::FetchInventoryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FetchInventoryResponse>>;

    async fn fetch_storage_inventory(
        &self,
        req: crate::model::FetchStorageInventoryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FetchStorageInventoryResponse>>;

    async fn list_utilization_reports(
        &self,
        req: crate::model::ListUtilizationReportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUtilizationReportsResponse>>;

    async fn get_utilization_report(
        &self,
        req: crate::model::GetUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UtilizationReport>>;

    async fn create_utilization_report(
        &self,
        req: crate::model::CreateUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_utilization_report(
        &self,
        req: crate::model::DeleteUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_datacenter_connectors(
        &self,
        req: crate::model::ListDatacenterConnectorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDatacenterConnectorsResponse>>;

    async fn get_datacenter_connector(
        &self,
        req: crate::model::GetDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DatacenterConnector>>;

    async fn create_datacenter_connector(
        &self,
        req: crate::model::CreateDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_datacenter_connector(
        &self,
        req: crate::model::DeleteDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn upgrade_appliance(
        &self,
        req: crate::model::UpgradeApplianceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_migrating_vm(
        &self,
        req: crate::model::CreateMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_migrating_vms(
        &self,
        req: crate::model::ListMigratingVmsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMigratingVmsResponse>>;

    async fn get_migrating_vm(
        &self,
        req: crate::model::GetMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::MigratingVm>>;

    async fn update_migrating_vm(
        &self,
        req: crate::model::UpdateMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_migrating_vm(
        &self,
        req: crate::model::DeleteMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn start_migration(
        &self,
        req: crate::model::StartMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn resume_migration(
        &self,
        req: crate::model::ResumeMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn pause_migration(
        &self,
        req: crate::model::PauseMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn finalize_migration(
        &self,
        req: crate::model::FinalizeMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn extend_migration(
        &self,
        req: crate::model::ExtendMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_clone_job(
        &self,
        req: crate::model::CreateCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn cancel_clone_job(
        &self,
        req: crate::model::CancelCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_clone_jobs(
        &self,
        req: crate::model::ListCloneJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCloneJobsResponse>>;

    async fn get_clone_job(
        &self,
        req: crate::model::GetCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CloneJob>>;

    async fn create_cutover_job(
        &self,
        req: crate::model::CreateCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn cancel_cutover_job(
        &self,
        req: crate::model::CancelCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_cutover_jobs(
        &self,
        req: crate::model::ListCutoverJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCutoverJobsResponse>>;

    async fn get_cutover_job(
        &self,
        req: crate::model::GetCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CutoverJob>>;

    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>>;

    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>>;

    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn add_group_migration(
        &self,
        req: crate::model::AddGroupMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn remove_group_migration(
        &self,
        req: crate::model::RemoveGroupMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_target_projects(
        &self,
        req: crate::model::ListTargetProjectsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTargetProjectsResponse>>;

    async fn get_target_project(
        &self,
        req: crate::model::GetTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TargetProject>>;

    async fn create_target_project(
        &self,
        req: crate::model::CreateTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn update_target_project(
        &self,
        req: crate::model::UpdateTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_target_project(
        &self,
        req: crate::model::DeleteTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_replication_cycles(
        &self,
        req: crate::model::ListReplicationCyclesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReplicationCyclesResponse>>;

    async fn get_replication_cycle(
        &self,
        req: crate::model::GetReplicationCycleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReplicationCycle>>;

    async fn list_image_imports(
        &self,
        req: crate::model::ListImageImportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImageImportsResponse>>;

    async fn get_image_import(
        &self,
        req: crate::model::GetImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImageImport>>;

    async fn create_image_import(
        &self,
        req: crate::model::CreateImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_image_import(
        &self,
        req: crate::model::DeleteImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_image_import_jobs(
        &self,
        req: crate::model::ListImageImportJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImageImportJobsResponse>>;

    async fn get_image_import_job(
        &self,
        req: crate::model::GetImageImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImageImportJob>>;

    async fn cancel_image_import_job(
        &self,
        req: crate::model::CancelImageImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn create_disk_migration_job(
        &self,
        req: crate::model::CreateDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_disk_migration_jobs(
        &self,
        req: crate::model::ListDiskMigrationJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiskMigrationJobsResponse>>;

    async fn get_disk_migration_job(
        &self,
        req: crate::model::GetDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiskMigrationJob>>;

    async fn update_disk_migration_job(
        &self,
        req: crate::model::UpdateDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_disk_migration_job(
        &self,
        req: crate::model::DeleteDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn run_disk_migration_job(
        &self,
        req: crate::model::RunDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn cancel_disk_migration_job(
        &self,
        req: crate::model::CancelDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>>;

    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>>;

    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>>;

    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>>;

    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy>;

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy>;
}

/// All implementations of [super::VmMigration] also implement [VmMigration].
#[async_trait::async_trait]
impl<T: super::VmMigration> VmMigration for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_sources(
        &self,
        req: crate::model::ListSourcesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListSourcesResponse>> {
        T::list_sources(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_source(
        &self,
        req: crate::model::GetSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Source>> {
        T::get_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_source(
        &self,
        req: crate::model::CreateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_source(
        &self,
        req: crate::model::UpdateSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_source(
        &self,
        req: crate::model::DeleteSourceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_source(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn fetch_inventory(
        &self,
        req: crate::model::FetchInventoryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FetchInventoryResponse>> {
        T::fetch_inventory(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn fetch_storage_inventory(
        &self,
        req: crate::model::FetchStorageInventoryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::FetchStorageInventoryResponse>> {
        T::fetch_storage_inventory(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_utilization_reports(
        &self,
        req: crate::model::ListUtilizationReportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListUtilizationReportsResponse>> {
        T::list_utilization_reports(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_utilization_report(
        &self,
        req: crate::model::GetUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::UtilizationReport>> {
        T::get_utilization_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_utilization_report(
        &self,
        req: crate::model::CreateUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_utilization_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_utilization_report(
        &self,
        req: crate::model::DeleteUtilizationReportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_utilization_report(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_datacenter_connectors(
        &self,
        req: crate::model::ListDatacenterConnectorsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDatacenterConnectorsResponse>>
    {
        T::list_datacenter_connectors(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_datacenter_connector(
        &self,
        req: crate::model::GetDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DatacenterConnector>> {
        T::get_datacenter_connector(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_datacenter_connector(
        &self,
        req: crate::model::CreateDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_datacenter_connector(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_datacenter_connector(
        &self,
        req: crate::model::DeleteDatacenterConnectorRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_datacenter_connector(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn upgrade_appliance(
        &self,
        req: crate::model::UpgradeApplianceRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::upgrade_appliance(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_migrating_vm(
        &self,
        req: crate::model::CreateMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_migrating_vm(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_migrating_vms(
        &self,
        req: crate::model::ListMigratingVmsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListMigratingVmsResponse>> {
        T::list_migrating_vms(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_migrating_vm(
        &self,
        req: crate::model::GetMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::MigratingVm>> {
        T::get_migrating_vm(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_migrating_vm(
        &self,
        req: crate::model::UpdateMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_migrating_vm(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_migrating_vm(
        &self,
        req: crate::model::DeleteMigratingVmRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_migrating_vm(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn start_migration(
        &self,
        req: crate::model::StartMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::start_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn resume_migration(
        &self,
        req: crate::model::ResumeMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::resume_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn pause_migration(
        &self,
        req: crate::model::PauseMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::pause_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn finalize_migration(
        &self,
        req: crate::model::FinalizeMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::finalize_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn extend_migration(
        &self,
        req: crate::model::ExtendMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::extend_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_clone_job(
        &self,
        req: crate::model::CreateCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_clone_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_clone_job(
        &self,
        req: crate::model::CancelCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::cancel_clone_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_clone_jobs(
        &self,
        req: crate::model::ListCloneJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCloneJobsResponse>> {
        T::list_clone_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_clone_job(
        &self,
        req: crate::model::GetCloneJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CloneJob>> {
        T::get_clone_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_cutover_job(
        &self,
        req: crate::model::CreateCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_cutover_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_cutover_job(
        &self,
        req: crate::model::CancelCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::cancel_cutover_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_cutover_jobs(
        &self,
        req: crate::model::ListCutoverJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListCutoverJobsResponse>> {
        T::list_cutover_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_cutover_job(
        &self,
        req: crate::model::GetCutoverJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::CutoverJob>> {
        T::get_cutover_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_groups(
        &self,
        req: crate::model::ListGroupsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListGroupsResponse>> {
        T::list_groups(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_group(
        &self,
        req: crate::model::GetGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Group>> {
        T::get_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_group(
        &self,
        req: crate::model::CreateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_group(
        &self,
        req: crate::model::UpdateGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_group(
        &self,
        req: crate::model::DeleteGroupRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_group(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn add_group_migration(
        &self,
        req: crate::model::AddGroupMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::add_group_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn remove_group_migration(
        &self,
        req: crate::model::RemoveGroupMigrationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::remove_group_migration(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_target_projects(
        &self,
        req: crate::model::ListTargetProjectsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListTargetProjectsResponse>> {
        T::list_target_projects(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_target_project(
        &self,
        req: crate::model::GetTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TargetProject>> {
        T::get_target_project(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_target_project(
        &self,
        req: crate::model::CreateTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_target_project(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_target_project(
        &self,
        req: crate::model::UpdateTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_target_project(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_target_project(
        &self,
        req: crate::model::DeleteTargetProjectRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_target_project(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_replication_cycles(
        &self,
        req: crate::model::ListReplicationCyclesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListReplicationCyclesResponse>> {
        T::list_replication_cycles(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_replication_cycle(
        &self,
        req: crate::model::GetReplicationCycleRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ReplicationCycle>> {
        T::get_replication_cycle(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_image_imports(
        &self,
        req: crate::model::ListImageImportsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImageImportsResponse>> {
        T::list_image_imports(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_image_import(
        &self,
        req: crate::model::GetImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImageImport>> {
        T::get_image_import(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_image_import(
        &self,
        req: crate::model::CreateImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_image_import(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_image_import(
        &self,
        req: crate::model::DeleteImageImportRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_image_import(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_image_import_jobs(
        &self,
        req: crate::model::ListImageImportJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListImageImportJobsResponse>> {
        T::list_image_import_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_image_import_job(
        &self,
        req: crate::model::GetImageImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ImageImportJob>> {
        T::get_image_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_image_import_job(
        &self,
        req: crate::model::CancelImageImportJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::cancel_image_import_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_disk_migration_job(
        &self,
        req: crate::model::CreateDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::create_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_disk_migration_jobs(
        &self,
        req: crate::model::ListDiskMigrationJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListDiskMigrationJobsResponse>> {
        T::list_disk_migration_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_disk_migration_job(
        &self,
        req: crate::model::GetDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DiskMigrationJob>> {
        T::get_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_disk_migration_job(
        &self,
        req: crate::model::UpdateDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::update_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_disk_migration_job(
        &self,
        req: crate::model::DeleteDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::delete_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn run_disk_migration_job(
        &self,
        req: crate::model::RunDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::run_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_disk_migration_job(
        &self,
        req: crate::model::CancelDiskMigrationJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::cancel_disk_migration_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_locations(
        &self,
        req: location::model::ListLocationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::ListLocationsResponse>> {
        T::list_locations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_location(
        &self,
        req: location::model::GetLocationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<location::model::Location>> {
        T::get_location(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_operations(
        &self,
        req: longrunning::model::ListOperationsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::ListOperationsResponse>> {
        T::list_operations(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_operation(
        &self,
        req: longrunning::model::GetOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<longrunning::model::Operation>> {
        T::get_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_operation(
        &self,
        req: longrunning::model::DeleteOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_operation(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_operation(
        &self,
        req: longrunning::model::CancelOperationRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::cancel_operation(self, req, options).await
    }

    fn get_polling_error_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_error_policy::PollingErrorPolicy> {
        T::get_polling_error_policy(self, options)
    }

    fn get_polling_backoff_policy(
        &self,
        options: &gax::options::RequestOptions,
    ) -> std::sync::Arc<dyn gax::polling_backoff_policy::PollingBackoffPolicy> {
        T::get_polling_backoff_policy(self, options)
    }
}
